//
//  DYWAccountModel.swift
//  sinaWeibo
//
//  Created by 董艳武 on 16/2/15.
//  Copyright © 2016年 董艳武. All rights reserved.
//

import UIKit

class DYWAccountModel: NSObject,NSCoding {
    
    /// access_token	string	用于调用access_token，接口获取授权后的access token。
    var access_token:String?
    /// expires_in	string	access_token的生命周期，单位是秒数。
    var expires_in:NSTimeInterval = 0{
        didSet {
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    /// remind_in	string	access_token的生命周期（该参数即将废弃，开发者请使用expires_in）。
    /// uid	string	当前授权用户的UID。
    var uid:String?
    
    /// 日期属性
    var expires_date:NSDate?
    
    /// screen_name	string	用户昵称
    var screen_name:String?
    
    /// profile_image_url	string	用户头像地址（中图），50×50像素
    var avatar_large:String?
    
    
    
    /// description 
    override var description:String {
        let arr = ["access_token","expires_date","uid","screen_name","avatar_large"]
        let dict = self.dictionaryWithValuesForKeys(arr)
        return dict.description
    }
    
    
    // 构造函数
    init(dict: [String:AnyObject]) {
        // 先调用父类的构造函数
        super.init()

        setValuesForKeysWithDictionary(dict)
    }

    // dict 里面可能会有比属性更多的 key ，不重写这个方法，程序可能会崩溃
    // 千万不到调用父类的 这个方法
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    // MARK:--NSCoding 的代理方法
    required init?(coder aDecoder: NSCoder) {
        
        self.uid = aDecoder.decodeObjectForKey("uid") as? String
        self.access_token = aDecoder.decodeObjectForKey("access_token") as? String
        self.expires_date = aDecoder.decodeObjectForKey("expires_date") as? NSDate
        self.screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
        self.avatar_large = aDecoder.decodeObjectForKey("avatar_large") as? String
    }
    
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(uid,forKey: "uid")
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expires_date,forKey: "expires_date")
        aCoder.encodeObject(screen_name,forKey: "screen_name")
        aCoder.encodeObject(avatar_large,forKey: "avatar_large")
    }
    // MARK:--调用保存的对象方法
    
    func saveInfo () {
        // 获取沙盒路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
        // 拼接文件的名称 path 是可选项
        let filePath = (path! as NSString).stringByAppendingPathComponent("dywweibo.plist")
        // 保存
        NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
    }
    
    // 类方法：在 func 前面加 class
    
    // MARK:--读取数据的方法
    class func getUserInfo () -> DYWAccountModel?{
        // 获取沙盒路径
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
        // 拼接文件的名称 path 是可选项
        let filePath = (path! as NSString).stringByAppendingPathComponent("dywweibo.plist")
        
        // 读取保存的对象
        let account = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? DYWAccountModel
        print(account?.access_token)
//        account?.expires_date = NSDate()
        
        // 使用 expires_date 与当前的时间进行比较
        print(account?.expires_date)
        if let saveDate =  account?.expires_date {
            print(NSDate())
            // 这个是两个时间比较返回的结果
            /*
            OrderedAscending  升序  越来越大
            OrderedSame       相同  相同
            OrderedDescending 降序  越来越小
            */
           if saveDate.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            return account
                
           } else{
            return nil
            }
        }
        // 读取数据
        return nil
    }
}
